home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch12 / RotRect.frm (.txt) < prev    next >
Visual Basic Form  |  1999-06-17  |  3KB  |  102 lines

  1. VERSION 5.00
  2. Begin VB.Form frmRotRect 
  3.    AutoRedraw      =   -1  'True
  4.    Caption         =   "RotRect"
  5.    ClientHeight    =   3195
  6.    ClientLeft      =   60
  7.    ClientTop       =   345
  8.    ClientWidth     =   4680
  9.    LinkTopic       =   "Form1"
  10.    ScaleHeight     =   3195
  11.    ScaleWidth      =   4680
  12.    StartUpPosition =   3  'Windows Default
  13.    Begin VB.TextBox txtAngle 
  14.       Height          =   285
  15.       Left            =   600
  16.       TabIndex        =   1
  17.       Text            =   "30"
  18.       Top             =   120
  19.       Width           =   615
  20.    End
  21.    Begin VB.Label Label1 
  22.       Caption         =   "Angle"
  23.       Height          =   255
  24.       Left            =   120
  25.       TabIndex        =   0
  26.       Top             =   120
  27.       Width           =   495
  28.    End
  29. Attribute VB_Name = "frmRotRect"
  30. Attribute VB_GlobalNameSpace = False
  31. Attribute VB_Creatable = False
  32. Attribute VB_PredeclaredId = True
  33. Attribute VB_Exposed = False
  34. Option Explicit
  35. Private Dragging As Boolean
  36. Private StartX As Single
  37. Private StartY As Single
  38. Private LastX As Single
  39. Private LastY As Single
  40. Private Objects As Collection
  41. Private Sub Form_Load()
  42.     ScaleMode = vbPixels
  43.     Set Objects = New Collection
  44. End Sub
  45. ' Start selecting a box.
  46. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  47.     Dragging = True
  48.     StartX = X
  49.     StartY = Y
  50.     LastX = X
  51.     LastY = Y
  52.     DrawMode = vbInvert
  53.     Line (StartX, StartY)-(LastX, LastY), , B
  54. End Sub
  55. ' Continue selecting an area.
  56. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  57.     If Not Dragging Then Exit Sub
  58.     Line (StartX, StartY)-(LastX, LastY), , B
  59.     LastX = X
  60.     LastY = Y
  61.     Line (StartX, StartY)-(LastX, LastY), , B
  62. End Sub
  63. ' Finish selecting an area.
  64. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  65. Const PI = 3.14159265
  66. Dim pgon As TwoDPolygon
  67. Dim M(1 To 3, 1 To 3) As Single
  68.     If Not Dragging Then Exit Sub
  69.     Dragging = False
  70.     Line (StartX, StartY)-(LastX, LastY), , B
  71.     LastX = X
  72.     LastY = Y
  73.     ' Create the new rectangle polygon.
  74.     Set pgon = New TwoDPolygon
  75.     pgon.NumPoints = 4
  76.     pgon.X(1) = StartX
  77.     pgon.X(2) = LastX
  78.     pgon.X(3) = LastX
  79.     pgon.X(4) = StartX
  80.     pgon.Y(1) = StartY
  81.     pgon.Y(2) = StartY
  82.     pgon.Y(3) = LastY
  83.     pgon.Y(4) = LastY
  84.     ' Create the rotation transformation.
  85.     m2RotateAround M, CSng(txtAngle.Text) * PI / 180, _
  86.         (StartX + LastX) / 2, (StartY + LastY) / 2
  87.     ' Rotate the polygon.
  88.     pgon.Transform M
  89.     ' Add the polygon to the objects collection.
  90.     Objects.Add pgon
  91.     ' Redraw.
  92.     DrawObjects
  93. End Sub
  94. Private Sub DrawObjects()
  95. Dim pgon As TwoDPolygon
  96.     DrawMode = vbCopyPen
  97.     Cls
  98.     For Each pgon In Objects
  99.         pgon.Draw Me
  100.     Next pgon
  101. End Sub
  102.